package com.kang.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.kang.pojo.ItemDetail;
import com.vonechina.entity.page.ItemBatchPage;
import com.vonechina.entity.page.ItemDetailPage;
import com.vonechina.entity.page.ItemLossPage;

/**
 * 
 * @author zs614
 *
 */
public interface ItemDetailMapper {

	/**
	 * 新增物品批次
	 * 
	 * @param itemDetail
	 *            物品批次实体类
	 * @return
	 */
	int addItemDetail(ItemDetail itemDetail);

	/**
	 * 生成批次号
	 * 
	 * @return
	 */
	String generateBatchNumber();

	/**
	 * 根据条件查询出物品批次
	 * 
	 * @param itemDetail
	 *            物品批次实体类
	 * @return
	 */
	ItemDetail selectItemDetailByCondition(ItemDetail itemDetail);

	/**
	 * 查询符合条件物品批次并通过id过滤部分
	 * 
	 * @param page
	 *            搜索条件实体类
	 * @return
	 */
	public List<ItemDetail> listItemNotIn(ItemDetailPage page);

	/**
	 * 查询符合条件物品批次并通过id过滤部分后的数量
	 * 
	 * @param page
	 *            搜索条件实体类
	 * @return
	 */
	public Integer countItemNotIn(ItemDetailPage page);

	/**
	 * 减少库存
	 * 
	 * @param id
	 *            批次主键
	 * @param number
	 *            数量
	 * @return
	 */
	public Integer subtractStock(@Param("id") Integer id, @Param("number") Integer number);

	/**
	 * 
	 * @param id
	 *            批次主键
	 * @param number
	 *            数量
	 * @return
	 */
	public Integer addStock(@Param("id") Integer id, @Param("number") Integer number);

	/**
	 * 查询库存
	 * 
	 * @param id
	 *            批次ID
	 * @return
	 */
	public Integer selectStock(@Param("id") Integer id);

	/**
	 * 
	 * @param id
	 *            批次ID
	 * @return
	 */
	public ItemDetail selectById(Integer id);

	/**
	 * 根据物品id查询所有的批次信息总条数
	 * 
	 * @param itemBatchPage
	 *            物品批次信息(分页封装的实体类)
	 * @return int型
	 */
	public Integer getAllBatchInfoCountById(ItemBatchPage itemBatchPage);

	/**
	 * 根据物品id查询所有的批次信息
	 * 
	 * @param itemBatchPage
	 * @return 集合批次信息
	 */
	public List<ItemDetail> getAllBatchInfoById(ItemBatchPage itemBatchPage);

	/**
	 * 添加报损物品时查询物品列表
	 * 
	 * @param page
	 *            查询条件（封装的分页实体类）
	 * @return int型（大于0成功否则失败）
	 */
	public int countItemNotInForLoss(ItemLossPage page);

	/**
	 * 添加报损物品时查询物品列表
	 * 
	 * @param page
	 *            查询条件（封装的分页实体类）
	 * @return 物品集合
	 */
	public List<ItemDetail> listItemNotInForLoss(ItemLossPage page);

	/**
	 * 根据批次id修改此批次数量
	 * 
	 * @param id
	 *            批次ID
	 * @param number
	 *            数量
	 * @return int型（大于0成功否则失败）
	 */
	public int updateBatchInventoryNumber(@Param("id") Integer id, @Param("number") Integer number);

	/**
	 * 根据批次id修改此批次数量(报损专用)
	 * 
	 * @param id
	 *            批次ID
	 * @param number
	 *            数量
	 * @return int型（大于0成功否则失败）
	 */
	public int updateBatchInventoryNumberForLoss(@Param("id") Integer id, @Param("number") Integer number);

}
